package br.com.spb.persistence;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.com.spb.domain.Deputado;
import br.com.spb.support.Dao;

 
@SuppressWarnings("unchecked")
public class DeputadoDao extends Dao<Deputado>{
     
    /**
     * @param sigUf
     * @param codMunicipioOrigem
     * @param codPartido
     * @param nome
     * @return
     */
    public List<Deputado> findByParametros(String sigUf, Long codMunicipioOrigem, Long codPartido,String nome) {
        Criteria criteria = createCriteria();

        if (sigUf != null) {
            criteria.add(Restrictions.like("sigUf", sigUf, MatchMode.ANYWHERE).ignoreCase());
        }
        
        if (codMunicipioOrigem != null) {
        	criteria.add(Restrictions.eq("codMunicipioOrigem", codMunicipioOrigem).ignoreCase());
        }
        
        if (codPartido != null) {
        	criteria.add(Restrictions.eq("codPartido", codPartido).ignoreCase());
        }
        
        if (nome != null) {
            criteria.add(Restrictions.like("nome", nome, MatchMode.ANYWHERE).ignoreCase()); 
        }
         
        criteria.addOrder(Order.asc("nome"));

		List<Deputado> lista = (List<Deputado>) criteria.list();

        return lista;
    } 
 
    /**
     * @param codigo
     * @return
     */
    public Deputado findById(Long codigo) {
        Criteria criteria = createCriteria(); 
        if (codigo != null) {
        	criteria.add(Restrictions.eq("codigo", codigo));
        } 
		List<Deputado> lista = (List<Deputado>) criteria.list();
  
		Deputado d = null;
		if(lista.size() > 0){
			d = lista.get(0);
		}
        return d;
    } 
}
